package com.niit.scala

object Base_03 {

  def main(args: Array[String]): Unit = {
    //1.方法的调用
    //1.1 后缀调用法  对象名.方法名(参数)
    //求 -1 的 绝对值
            //对象名.方法名(参数)
    println(Math.abs(-1))

    //1.2 中缀调用法. Scala中字面值常量其实可以是一个对象，所有的操作符都是方法
      //对象名 方法名 参数
    var v = 1 to 10
    var i = Math abs -1
    i = 1 + 1

    //1.3花括号调用法
    i = Math.abs{
      println("绝对值：")
      -1
    }
    println(i)

    //1.4无括号调用法,如果方法没有参数，可以省略方法后面的括号
    sayHello

    /*
     2.函数: var/val 函数变量名 = (参数列表) => 函数
        函数本身就是一个对象，类似于方法，函数也有参数列表和返回值
        函数定义不需要使用def定义
        无需指定返回类型
     */
    //定义两个整数求和的函数
    var sum = (a:Int,b:Int)=> a+b

    var res = sum(10,20)
    println(res)
    /*
      方法和函数的区别
        方法属于类或者对象，在运行时候会加载到JVM的方法区
        可以将函数对象赋值给一个变量，在运行的时候会加载到JVM的堆内存中
        函数是一个对象，继承于FunctionN， 函数对象拥有特有方法apply curried toString tupled方法
        函数必须要有返回值的
        函数 大于 方法
     */
    //方法 转换为函数
    val a = add _
    println(a(30,40))
  }

  def add(a:Int,b:Int) = a+b

  def sayHello(): Unit ={
    println("Hello")
  }

}
